home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / SHOW!.BAS < prev    next >
BASIC Source File  |  2000-09-29  |  10KB  |  488 lines

  1. $INCLUDE "REGNAMES.INC"
  2. CLS
  3.  
  4. PRINT "Show!  -  Version 0.9  -  Copyright (C) 1993 by Thomas Dreibholz"
  5. PRINT ""
  6.  
  7. IF CheckVector(&H49)=0 THEN
  8.  PRINT "FEHLER: File Transfer ist nicht aktiv."
  9.  PRINT "        FILE.EXE wurde nicht durch die CONFIG.SYS eingebunden!"
  10.  GOTO ende
  11. END IF
  12.  
  13. IF CheckVector(&H33)=0 THEN
  14.  PRINT "FEHLER: Maustreiber nicht vorhanden!"
  15.  GOTO ende
  16. END IF
  17.  
  18. REG %AX,0
  19. CALL INTERRUPT &H33
  20. IF REG(%AX)=0 THEN
  21.  PRINT "FEHLER: Fehler bei Reset des Maustreibers!"
  22.  GOTO ende
  23. END IF
  24. tasten=REG(%BX)
  25.  
  26. REG %AX,(&H6*256)
  27. CALL INTERRUPT &H49
  28. jseg=REG(%ES)
  29. janus=REG(%DI)
  30.  
  31. REG %AX,(&H4F*256)
  32. REG %ES,jseg
  33. REG %DI,janus
  34. CALL INTERRUPT &H10
  35. IF REG(%AX)<>&H4F THEN
  36.  PRINT "FEHLER: Es ist keine SuperVGA-Karte installiert, oder der"
  37.  PRINT "        VESA-Treiber wurde nicht in die CONFIG.SYS eingebunden."
  38.  GOTO ende
  39. END IF
  40.  
  41. REG %AX,(&H4F*256)+&H01
  42. REG %CX,&H101
  43. REG %ES,jseg
  44. REG %DI,janus
  45. CALL INTERRUPT &H10
  46. IF REG(%AX)<>&H4F THEN
  47.  PRINT "FEHLER: SuperVGA-Karte untersttzt den Modus $101 (640*480 bei 256 Farben)"
  48.  PRINT "        nicht. Diese Aufl”sung wird aber mindestens ben”tigt."
  49. END IF
  50.  
  51. DEF SEG = jseg
  52. m101.Segment=PEEKI(janus+8)
  53. m101.Add=PEEKI(janus+4)
  54. m101.File=OpenAmiga("M:Display640")
  55. IF m101.File=-1 THEN
  56.  PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display640.cdat l„át sich"
  57.  PRINT "        nicht ”ffnen."
  58.  GOTO ende
  59. END iF
  60. m101.FileOkay=100
  61.  
  62. REG %AX,(&H4F*256)+&H01
  63. REG %CX,&H103
  64. REG %ES,jseg
  65. REG %DI,janus
  66. CALL INTERRUPT &H10
  67. IF REG(%AX)=&H4F THEN
  68.  DEF SEG = jseg
  69.  m103.Okay=100
  70.  m103.Segment=PEEKI(janus+8)
  71.  m103.Add=PEEKI(janus+4)
  72.  m103.File=OpenAmiga("M:Display800")
  73.  IF m103.File=-1 THEN
  74.   PRINT "FEHLER: Die Datei SYS:PC/ATUtilities/Display800.cdat l„át sich"
  75.   PRINT "        nicht ”ffnen."
  76.   GOTO ende
  77.  END iF
  78.  m103.FileOkay=100
  79. END IF
  80.  
  81. Start:
  82. DIM bilder$(100)
  83. bilder$(0)="CC:Prgs/F11.cdat"
  84. bilder$(1)="CC:Prgs/T1.cdat"
  85. bilder$(2)="CC:Prgs/F12.cdat"
  86. bilder$(3)="CC:Prgs/J1.cdat"
  87. bilder$(4)="CC:Prgs/F13.cdat"
  88. bilder$(5)="CC:Prgs/Newton.cdat"
  89. bilder$(6)="CC:Prgs/F14.cdat"
  90. bilder$(7)="CC:Prgs/F640*480.cdat"
  91. bilder$(8)="CC:Prgs/F800*600.cdat"
  92. bilder=8
  93. richtung=1
  94. wiederholung=0
  95.  
  96. bool=1 : bildFH=-1 : bnum=0
  97. WHILE bool=1
  98.  IF bnum<>-1 THEN
  99.   bild$=bilder$(bnum)
  100.   IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
  101.   CALL LadeBild
  102.   IF bildFH<>-1 THEN CALL LadePalette
  103.   CALL Display(0)
  104.   FOR schleife=0 TO 9000
  105.    IF INKEY$<>"" OR bildFH=-1 OR Button<>0 THEN
  106.     WHILE Button<>0 : WEND
  107. q:
  108.     f=Schalter
  109.     IF f=0 THEN richtung=-1 : GOTO neu
  110.     IF f=1 THEN richtung=1 : GOTO neu
  111.     IF f=2 THEN bnum=0 : GOTO weiter
  112.     IF f=3 THEN bnum=bilder : GOTO weiter
  113.     IF f=4 THEN
  114.      IF bild<>-1 THEN
  115.       WHILE INKEY$="" OR Button<>0 OR JButton<>0 : WEND
  116.      END IF
  117.      GOTO q
  118.     END IF
  119.     IF f=5 THEN GOTO Start
  120.     IF f=7 THEN GOTO ende
  121.     IF bildFH=-1 THEN GOTO weiter
  122.    END IF
  123.   NEXT
  124.  ELSE
  125.   GOTO q
  126.  END IF
  127. neu:
  128.  bnum=bnum+richtung
  129.  IF wiederholung=1 THEN
  130.   IF bnum>bilder THEN bnum=0
  131.   IF bnum<0 THEN bnum=bilder
  132.  ELSE
  133.   IF bnum>bilder OR bnum<0 THEN bnum=-1
  134.  END IF
  135. weiter:
  136. WEND
  137.  
  138. ende:
  139. SCREEN 0
  140. CLS
  141. IF bildFH<>-1 THEN CALL CloseAmiga(bildFH)
  142. IF m103.FileOkay THEN CALL CloseAmiga(m103.File)
  143. IF m101.FileOkay THEN CALL CloseAmiga(m101.File)
  144. SOUND 1500,2
  145. PRINT "bye!"
  146. END
  147.  
  148.  
  149. FUNCTION CheckVector(num) STATIC
  150.  REG %AX,(&H35*256)+num
  151.  CALL INTERRUPT &H21
  152.  segm&=REG(%ES)
  153.  offs&=REG(%BX)
  154.  DEF SEG = segm&
  155.  IF (segm&=0) OR (PEEK(offs&)=207) THEN
  156.   CheckVector=0
  157.  ELSE
  158.   CheckVector=1
  159.  END IF
  160. END FUNCTION
  161.  
  162. FUNCTION OpenAmiga(n$) SHARED
  163.  n$=n$+CHR$(0)
  164.  DEF SEG = jseg
  165.  FOR i=1 TO LEN(n$)
  166.   POKE janus+i-1,ASC(MID$(n$,i,1))
  167.  NEXT
  168.  REG %AX,&H0*256
  169.  REG %BX,1
  170.  CALL INTERRUPT &H49
  171.  IF REG(%AX)=10000 THEN
  172.   OpenAmiga=REG(%BX)
  173.  ELSE
  174.   OpenAmiga=-1
  175.  END IF
  176. END FUNCTION
  177.  
  178. SUB CloseAmiga(handle) STATIC
  179.  REG %AX,&H1*256
  180.  REG %BX,handle
  181.  CALL INTERRUPT &H49
  182. END SUB
  183.  
  184. SUB SeekAmiga(handle,p) STATIC
  185.  REG %AX,&H7*256
  186.  REG %BX,handle
  187.  REG %CX,p
  188.  CALL INTERRUPT &H49
  189. END SUB
  190.  
  191. FUNCTION ReadAmiga(handle,length) STATIC
  192.  REG %AX,&H2*256
  193.  REG %BX,handle
  194.  REG %CX,length
  195.  CALL INTERRUPT &H49
  196.  ReadAmiga=REG(%BX)
  197. END FUNCTION
  198.  
  199. SUB CopyToPC(s,o&,length) STATIC
  200.  REG %AX,&H5*256
  201.  REG %BX,s
  202.  REG %DX,o&
  203.  REG %CX,length
  204.  CALL INTERRUPT &H49
  205. END SUB
  206.  
  207. SUB SelectRAM(num) STATIC
  208.  REG %AX,(&H4F*256)+&H05
  209.  REG %BX,0
  210.  REG %DX,num
  211.  CALL INTERRUPT &H10
  212. END SUB
  213.  
  214. SUB SelectMode(num) SHARED
  215.  REG %AX,(&H4F*256)+&H02
  216.  REG %BX,num
  217.  CALL INTERRUPT &H10
  218.  IF mode=&H103 THEN
  219.   segment=m103.Segment
  220.   add=m103.Add
  221.  ELSE
  222.   segment=m101.Segment
  223.   add=m101.Add
  224.  END IF
  225.  modus=num
  226. END SUB
  227.  
  228. SUB LadePalette SHARED
  229.  d=ReadAmiga(bildFH,4)
  230.  DEF SEG = jseg
  231.  farben=PEEK(janus+3)
  232.  IF CHR$(PEEK(janus+0))="P" THEN
  233.   d=ReadAmiga(bildFH,3*255)
  234.   IF d>0 THEN
  235.    anzcols=d/3
  236.    REG %AX,(&H10*256)+&H12
  237.    REG %BX,0
  238.    REG %CX,INT(d/3)
  239.    REG %ES,jseg
  240.    REG %DX,janus
  241.    CALL INTERRUPT &H10
  242.   END IF
  243.  ELSE
  244.   p=janus+3
  245.   IF farben<253 THEN farben=farben+3
  246.   s=INT(farben/3)
  247.   s2=s+s
  248.   POKE janus+0,0
  249.   POKE janus+1,0
  250.   POKE janus+2,0
  251.   FOR i=1 TO s
  252.    s3=15+(i*(240/s))
  253.    POKE p+0,i
  254.    POKE p+1,i
  255.    POKE p+2,s3
  256.    POKE p+s,s3
  257.    POKE p+s+1,s3
  258.    POKE p+s+2,i
  259.    POKE p+s2,s3
  260.    POKE p+s2+1,i
  261.    POKE p+s2+2,i
  262.    p=p+3
  263.   NEXT
  264.   REG %AX,(&H10*256)+&H12
  265.   REG %BX,0
  266.   REG %CX,255
  267.   REG %ES,jseg
  268.   REG %DX,janus
  269.   CALL INTERRUPT &H10
  270.  END IF
  271. END SUB
  272.  
  273. SUB LadeBild SHARED
  274.  bild=0
  275.  bildFH=OpenAmiga(bild$)
  276.  IF bildFH<>-1 THEN
  277.   d=ReadAmiga(bildFH,8)
  278.   IF d=8 THEN
  279.    DEF SEG = jseg
  280.    IF CHR$(PEEK(janus+0))="C" AND CHR$(PEEK(janus+1))="D" AND CHR$(PEEK(janus+2))="A" AND CHR$(PEEK(janus+3))="T" THEN
  281.     w=PEEK(janus+4)*256+PEEK(janus+5)
  282.     h=PEEK(janus+6)*256+PEEK(janus+7)
  283.     IF w=800 THEN
  284.      modus=&H103
  285.      IF m103.Okay<>100 THEN
  286.       modus=0
  287.      END IF
  288.     ELSE
  289.      modus=&H101
  290.     END IF
  291.     IF modus<>0 THEN
  292.      size&=w*h
  293.      CALL SelectMode(modus)
  294.      IF REG(%AX)=&H4F THEN
  295.       bild=1
  296.       CALL Display(1)
  297.       CALL Lade(bildFH,w*h)
  298.      END IF
  299.     ELSE
  300.      SOUND 1500,5
  301.     END IF
  302.    ELSE
  303.     SOUND 1500,5
  304.    END IF
  305.   ELSE
  306.    SOUND 1500,5
  307.   END IF
  308.  ELSE
  309.   SOUND 1500,5
  310.  END IF
  311. END SUB
  312.  
  313. SUB Lade(fh,size&) SHARED
  314.  p&=0 : d&=0 : bytes=1 : s=0
  315.  WHILE d&<size&
  316.   IF d&+16384>size& THEN l=size&-d& ELSE l=16384
  317.   bytes=ReadAmiga(fh,l)
  318.   CALL CopyToPC(segment,p&,bytes)
  319.   p&=p&+bytes
  320.   d&=d&+bytes
  321.   IF p&>65535 THEN
  322.    s=s+1
  323.    p&=0
  324.    CALL SelectRAM(s)
  325.   END IF
  326.  WEND
  327. END SUB
  328.  
  329. SUB Display(w) STATIC
  330.  REG %AX,(&H12*256)+w
  331.  REG %BX,&H36
  332.  CALL INTERRUPT &H10
  333. END SUB
  334.  
  335. SUB SetPal(farbe,r,g,b) STATIC
  336.  REG %AX,(&H10*256)+&H10
  337.  REG %BX,farbe
  338.  REG %CX,(g*256)+b
  339.  REG %DX,(r*256)
  340.  CALL INTERRUPT &H10
  341. END SUB
  342.  
  343. SUB DrawX(x,y,sw,w,farbe) STATIC
  344.  xs=(y*sw)+x
  345.  FOR i=xs TO xs+w
  346.   POKE i,farbe
  347.  NEXT
  348. END SUB
  349.  
  350. SUB DrawY(x,y,sw,h,farbe) STATIC
  351.  FOR i=y TO y+h
  352.   POKE (i*sw)+x,farbe
  353.  NEXT
  354. END SUB
  355.  
  356. SUB DrawBox(x,y,w,h,farbe) SHARED
  357.  DEF SEG = segment
  358.  IF modus=&H103 THEN sw=800 ELSE sw=640
  359.  CALL DrawX(x,y,sw,w,farbe)
  360.  CALL DrawX(x,y+h,sw,w,farbe)
  361.  CALL DrawY(x,y,sw,h,farbe)
  362.  CALL DrawY(x+w,y,sw,h,farbe)
  363. END SUB
  364.  
  365. SUB Draw3dBox(x,y,w,h,farbe1,farbe2) SHARED
  366.  DEF SEG = segment
  367.  IF modus=&H103 THEN sw=800 ELSE sw=640
  368.  CALL DrawX(x,y,sw,w,farbe1)
  369.  CALL DrawX(x,y+h,sw,w,farbe2)
  370.  CALL DrawY(x,y,sw,h,farbe1)
  371.  CALL DrawY(x+w,y,sw,h,farbe2)
  372. END SUB
  373.  
  374. FUNCTION Button STATIC
  375.  REG %AX,3
  376.  CALL INTERRUPT &H33
  377.  Button=REG(%BX)
  378. END FUNCTION
  379.  
  380. FUNCTION Schalter SHARED
  381.  DIM cx(4),dx(4)
  382.  IF bildFH=-1 THEN
  383.   CALL SelectMode(&H101)
  384.  END IF
  385.  CALL SelectRAM(0)
  386.  j=0
  387.  FOR i=12 TO 15
  388.   REG %AX,(&H10*256)+&H15
  389.   REG %BX,i
  390.   CALL INTERRUPT &H10
  391.   cx(j)=REG(%CX)
  392.   dx(j)=REG(%DX)
  393.   j=j+1
  394.  NEXT
  395.  CALL SetPal(12,255,255,80)
  396.  CALL SetPal(13,160,160,180)
  397.  CALL SetPal(14,0,0,0)
  398.  CALL SetPal(15,255,255,255)
  399.  IF modus=&H103 THEN
  400.   rx=800 : ry=600
  401.   CALL SeekAmiga(m103.File,8)
  402.   CALL Lade(m103.File,48800)
  403.  ELSE
  404.   rx=640 : ry=480
  405.   CALL SeekAmiga(m101.File,8)
  406.   CALL Lade(m101.File,39040)
  407.  END IF
  408.  REG %AX,&H0B
  409.  CALL INTERRUPT &H33
  410.  ende1=1
  411.  IF wiederholung=1 THEN
  412.   CALL Draw3dBox(5+(6*78),10,75,25,14,15)
  413.  END IF
  414.  gad=0 : ogad=0 : old=0 : down=0 : wahl=-1
  415.  CALL DrawBox(4,9,77,27,12)
  416.  i$=""
  417.  WHILE ende1=1
  418.   REG %AX,&H0B
  419.   CALL INTERRUPT &H33
  420.   i$=INKEY$
  421.   last=(REG(%CX)/4)+old
  422.   IF last<-6 OR i$="4" THEN
  423.    IF gad>0 THEN gad=gad-1
  424.    old=0
  425.   ELSEIF last>6 OR i$="6" THEN
  426.    IF gad<7 THEN gad=gad+1
  427.    old=0
  428.   ELSE
  429.    old=last
  430.   END IF
  431.   IF gad<>ogad THEN
  432.     IF down=1 THEN
  433.      CALL Draw3dBox(5+(ogad*78),10,75,25,15,14)
  434.      down=0
  435.     END IF
  436.     CALL DrawBox(4+(ogad*78),9,77,27,13)
  437.     CALL DrawBox(4+(gad*78),9,77,27,12)
  438.    ogad=gad
  439.   END IF
  440.   o=Button
  441.   IF o>1 OR i$=CHR$(27) THEN
  442.    ende1=0
  443.   ELSE
  444.    IF o=1 OR i$=CHR$(13) THEN
  445.     IF gad=6 THEN
  446.      IF wiederholung=0 THEN
  447.       CALL Draw3dBox(5+(6*78),10,75,25,14,15)
  448.       wiederholung=1
  449.      ELSE
  450.       CALL Draw3dBox(5+(6*78),10,75,25,15,14)
  451.       wiederholung=0
  452.      END IF
  453.      WHILE Button<>0 : WEND
  454.     ELSE
  455.      CALL Draw3dBox(5+(gad*78),10,75,25,14,15)
  456.      down=1
  457.     END IF
  458.    ELSE
  459.     IF down=1 THEN
  460.      CALL Draw3dBox(5+(gad*78),10,75,25,15,14)
  461.      wahl=gad
  462.      down=0
  463.      ende1=0
  464.     END IF
  465.    END IF
  466.   END IF
  467.  WEND
  468.  IF bild=1 THEN
  469.   IF modus=&H103 THEN
  470.    CALL SeekAmiga(bildFH,8)
  471.    CALL Lade(bildFH,48800)
  472.   ELSE
  473.    CALL SeekAmiga(bildFH,8)
  474.    CALL Lade(bildFH,39040)
  475.   END IF
  476.  END IF
  477.  j=0
  478.  FOR i=12 TO 15
  479.   REG %AX,(&H10*256)+&H10
  480.   REG %BX,i
  481.   REG %CX,cx(j)
  482.   REG %DX,dx(j)
  483.   CALL INTERRUPT &H10
  484.   j=j+1
  485.  NEXT
  486.  Schalter=wahl
  487. END FUNCTION
  488.